home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / gkismet / DrawingArea.pm < prev    next >
Text File  |  2005-10-20  |  4KB  |  177 lines

  1. #!/usr/bin/perl -w
  2. #
  3. # $Id: DrawingArea.pm,v 1.3 2003/07/17 19:32:24 solovam Exp $
  4. #
  5. # This file is a part of gkismet
  6. #
  7. # This program is free software; you can redistribute it and/or
  8. # modify it under the terms of the GNU General Public License
  9. # as published by the Free Software Foundation; either version 2
  10. # of the License, or (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20. #
  21.  
  22. #
  23. # DrawingArea class
  24. #
  25. package DrawingArea;
  26.  
  27. use Gnome;
  28. use Misc;
  29. use strict;
  30.  
  31. #
  32. # Constructor
  33. #
  34. sub new
  35. {
  36.     my $type = shift;
  37.     my $self = {};
  38.     bless $self, $type;
  39.     $self->{'width'} = shift;
  40.     $self->{'height'} = shift;
  41.     $self->{'draw'} = shift;
  42.  
  43.     my $gtkDrawingArea = new Gtk::DrawingArea();
  44.     $self->{'gtkDrawingArea'} = $gtkDrawingArea;
  45.     $gtkDrawingArea->size($self->{'width'}, $self->{'height'});
  46.     $gtkDrawingArea->signal_connect('configure_event', sub{$self->configureHandler(@_)});
  47.     $gtkDrawingArea->signal_connect('expose_event', sub{$self->exposeHandler(@_)});
  48.  
  49.     return $self;
  50. }
  51.  
  52. #
  53. # Handle configure event from drawing area
  54. #
  55. sub configureHandler
  56. {
  57.     my $self = shift;
  58.     my $gtkDrawingArea = shift;
  59.     my $event = shift;
  60.     my $pixmap = new Gtk::Gdk::Pixmap($gtkDrawingArea->window(), $gtkDrawingArea->allocation()->[2], $gtkDrawingArea->allocation()->[3], -1);
  61.     $self->{'pixmap'} = $pixmap;
  62.     if(!$self->{'gcBuilt'})
  63.         {
  64.         $self->buildGC();
  65.         }
  66.     &{$self->{'draw'}}();
  67.     return $true;
  68. }
  69.  
  70. #
  71. # Handle expose event from drawing area
  72. #
  73. sub exposeHandler
  74. {
  75.     my $self = shift;
  76.     my $gtkDrawingArea = shift;
  77.     my $event = shift;
  78.     $gtkDrawingArea->window()->draw_pixmap($gtkDrawingArea->style()->fg_gc('normal'), $self->{'pixmap'},
  79.         $event->{'area'}[0], $event->{'area'}[1], $event->{'area'}[0], $event->{'area'}[1], $event->{'area'}[2], $event->{'area'}[3]);
  80.     return $false;
  81. }
  82.  
  83. #
  84. # Get string height
  85. #
  86. sub stringHeight
  87. {
  88.     my $self = shift;
  89.     my $window;
  90.     if(!ref($self))
  91.     {
  92.         $window = shift;
  93.     }
  94.     else
  95.     {
  96.         $window = $self->{'gtkDrawingArea'};
  97.     }
  98.     my $string = shift;
  99.  
  100.     my $stringHeight = ($window->style()->font()->string_extents($string))[3] + ($window->style()->font()->string_extents($string))[4];
  101.  
  102.     return $stringHeight;
  103. }
  104.  
  105. #
  106. # Get string width
  107. #
  108. sub stringWidth
  109. {
  110.     my $self = shift;
  111.     my $window;
  112.     if(!ref($self))
  113.     {
  114.         $window = shift;
  115.     }
  116.     else
  117.     {
  118.         $window = $self->{'gtkDrawingArea'};
  119.     }
  120.     my $string = shift;
  121.  
  122.     my $stringWidth = $window->style()->font()->string_measure($string);
  123.  
  124.     return $stringWidth;
  125. }
  126.  
  127. #
  128. # Build some GCs
  129. #
  130. sub buildGC
  131. {
  132.     my $self =shift;
  133.     my $gtkDrawingArea = $self->{'gtkDrawingArea'};
  134.     my $redGC = new Gtk::Gdk::GC($gtkDrawingArea->window());
  135.     my $blueGC = new Gtk::Gdk::GC($gtkDrawingArea->window());
  136.     my $greenGC = new Gtk::Gdk::GC($gtkDrawingArea->window());
  137.     my $redColor = $gtkDrawingArea->window()->get_colormap->color_alloc(Gtk::Gdk::Color->parse_color('red'));
  138.     my $greenColor = $gtkDrawingArea->window()->get_colormap->color_alloc(Gtk::Gdk::Color->parse_color('green'));
  139.     my $blueColor = $gtkDrawingArea->window->get_colormap->color_alloc(Gtk::Gdk::Color->parse_color('blue'));
  140.     $redGC->set_foreground($redColor);
  141.     $greenGC->set_foreground($greenColor);
  142.     $blueGC->set_foreground($blueColor);
  143.     $self->{'redGC'} = $redGC;
  144.     $self->{'greenGC'} = $greenGC;
  145.     $self->{'blueGC'} = $blueGC;
  146.     $self->{'gcBuilt'} = $true;
  147. }
  148.  
  149. #
  150. # Return widget
  151. #
  152. sub getWidget
  153. {
  154.     my $self = shift;
  155.     return $self->{'gtkDrawingArea'};
  156. }
  157.  
  158. #
  159. # Return drawing area
  160. #
  161. sub gtkDrawingArea
  162. {
  163.     my $self = shift;
  164.     return $self->{'gtkDrawingArea'};
  165. }
  166.  
  167. #
  168. # Return pixmap
  169. #
  170. sub pixmap
  171. {
  172.     my $self = shift;
  173.     return $self->{'pixmap'};
  174. }
  175.  
  176. 1;
  177.